Namespace ক্লোজারের একটি গুরুত্বপূর্ণ ধারণা, যা প্রজেক্টে ব্যবহৃত ফাংশন, ভ্যারিয়েবল এবং ডেটা স্ট্রাকচারগুলিকে সংগঠিত ও আলাদা রাখতে সহায়ক। এটি কোডের নাম সংঘর্ষ (name collision) প্রতিরোধ করে এবং বড় প্রজেক্টে কোডকে গঠনমূলকভাবে বিভক্ত করে ব্যবহারের সুবিধা প্রদান করে।
Namespace মূলত একটি লজিক্যাল স্পেস বা পরিবেশ যেখানে একটি নির্দিষ্ট নামের সাথে সম্পর্কিত সব ফাংশন এবং ডেটা সংরক্ষিত থাকে। এর মাধ্যমে একই নামে থাকা ভিন্ন ভিন্ন ফাংশন এবং ভ্যারিয়েবলকে আলাদা করা যায়। উদাহরণস্বরূপ, math
নামে একটি namespace-এ গণিত সম্পর্কিত ফাংশন থাকতে পারে এবং string
নামে আরেকটি namespace-এ স্ট্রিং সম্পর্কিত ফাংশন থাকতে পারে।
Namespace ব্যবহারের প্রধান কারণগুলি হলো:
ক্লোজারে ns
কীওয়ার্ড ব্যবহার করে namespace তৈরি করা যায়। নিচে কয়েকটি উদাহরণ এবং ধাপ দেওয়া হলো।
(ns myproject.math)
(defn add [a b]
(+ a b))
(defn subtract [a b]
(- a b))
এখানে, myproject.math
নামে একটি namespace তৈরি করা হয়েছে যেখানে দুটি ফাংশন add
এবং subtract
সংজ্ঞায়িত করা হয়েছে।
Namespace ব্যবহারের জন্য প্রথমে এটিকে require
করতে হয়। যেমন:
(ns myproject.main
(:require [myproject.math :as math]))
(math/add 10 5) ; আউটপুট: 15
(math/subtract 10 5) ; আউটপুট: 5
এখানে, myproject.math
namespace-কে myproject.main
namespace-এ :as
বিকল্প দিয়ে math
নামে অ্যাক্সেস করা হয়েছে। এখন math/add
এবং math/subtract
ফাংশনগুলো myproject.main
namespace-এ ব্যবহার করা যাচ্ছে।
require
: অন্য namespace-কে বর্তমান namespace-এ ব্যবহার করতে আমদানি করা হয়।use
: পুরো namespace-কে বর্তমান namespace-এ এনে ফাংশনগুলো সরাসরি ব্যবহার করা যায় (তবে বড় প্রজেক্টে নাম সংঘর্ষ হতে পারে)।alias
: as
অপশন দিয়ে নির্দিষ্ট namespace-কে একটি সংক্ষিপ্ত নামে অ্যাক্সেস করতে দেওয়া হয়।use
এবং alias
(ns myproject.core
(:use [myproject.math])) ; `use` দিয়ে সরাসরি ব্যবহার করা
(add 10 5) ; আউটপুট: 15
(subtract 10 5) ; আউটপুট: 5
(ns myproject.main
(:require [myproject.math :as m])) ; `alias` দিয়ে সংক্ষিপ্ত নাম
(m/add 10 5) ; আউটপুট: 15
(m/subtract 10 5) ; আউটপুট: 5
Namespace ক্লোজারের একটি শক্তিশালী বৈশিষ্ট্য যা বড় এবং জটিল প্রজেক্টে কোড মডুলারাইজেশন, নাম সংঘর্ষ এড়ানো এবং পাঠযোগ্যতা বৃদ্ধিতে সহায়ক। Namespace এর মাধ্যমে ফাংশন এবং ভ্যারিয়েবলগুলো আলাদা রাখা যায় এবং এটি প্রজেক্টের গঠনমূলক বৈশিষ্ট্য নিশ্চিত করে, যা দীর্ঘমেয়াদে কোড রক্ষণাবেক্ষণের জন্য অত্যন্ত গুরুত্বপূর্ণ।
common.read_more